package com.work.shart.common.util;

import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import org.apache.commons.lang3.Validate;

import java.lang.reflect.Field;
import java.text.MessageFormat;

public class FieldUtil {
    private FieldUtil() {
    }

    /**
     * 反射获取类中属性对应的数据库字段名称
     *
     * @param beanField
     * @param clazz
     * @return
     */
    public static String getDbField(String beanField, Class<?> clazz) {
        Validate.notNull(clazz, "实体类不能为空");
        Validate.notEmpty(beanField, "字段名不能为空");
        Field field = ReflectUtil.getField(clazz, beanField);
        Validate.notNull(field, "在类：{}中找不到属性：{}", clazz.getSimpleName(), beanField);
        TableField tf = field.getAnnotation(TableField.class);
        if (tf != null && StrUtil.isNotEmpty(tf.value())) {
            return tf.value();
        }
        TableId ti = field.getAnnotation(TableId.class);
        if (ti != null && StrUtil.isNotEmpty(ti.value())) {
            return ti.value();
        }
        return MessageFormat.format("{0}.{1}未标记 @TableField 或 @TableId", clazz.getSimpleName(), beanField);

    }

}
